package com.divemotor.ventarepuestosinternet.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity
@Table(name = "REP_MAE_GRUPO")
@NamedQueries({
		@NamedQuery(name="Grupos.listaGrupos", query="SELECT new com.divemotor.ventarepuestosinternet.beans.adapter.DataAdapter(d.idGrupo, d.nombre) FROM Grupo d " +
													" WHERE d.estado = :estado"),
													
		@NamedQuery(name="Grupos.comboGruposVehiculos", query="SELECT distinct new com.divemotor.ventarepuestosinternet.beans.adapter.DataAdapter(g.idGrupo, g.nombre, g.codigo) " +
															  " FROM ModeloFabrica mf, VehiculoModeloFabrica vmf," +
															  " Imagen im, SubGrupo sg, Grupo g" +
															  " where vmf.modeloFabrica.modeloFabricaPK.idModeloFabrica = mf.modeloFabricaPK.idModeloFabrica " +
															  " and im.modeloFabrica.modeloFabricaPK.idModeloFabrica = mf.modeloFabricaPK.idModeloFabrica " +
															  " and im.modeloFabrica.modeloFabricaPK.idMarca = mf.modeloFabricaPK.idMarca " +
															  " and im.modeloFabrica.modeloFabricaPK.idTipoComponente = mf.modeloFabricaPK.idTipoComponente " +
															  " and sg.idSubGrupo = im.subGrupo.idSubGrupo " +
															  " and sg.grupo.idGrupo = g.idGrupo " +
															  " and vmf.vehiculo.chasis = :chasis" +
															  " and mf.modeloFabricaPK.idTipoComponente = :tipoComponente")
})
public class Grupo implements Serializable{

	private static final long serialVersionUID = -1041641446521982557L;

	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE , generator="SEQ_REP_MAE_GRUPO")
	@SequenceGenerator(name = "SEQ_REP_MAE_GRUPO", sequenceName = "REPUESTOS.SEQ_REP_MAE_GRUPO", allocationSize = 0)
	@Column(name="cod_id_grupo")
	private Integer idGrupo;
	@Column(length=10,name="cod_grupo")
	private String codigo;
	@Column(name="des_nombre",length=50)
	private String nombre;
	@Column(name = "ind_estado", length=1)
	private String estado;
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="COD_ID_PAIS",referencedColumnName="COD_ID_PAIS" )
	private Pais pais;
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="COD_ID_USUARIO_CREACION",referencedColumnName="COD_ID_USUARIO" )
	private Usuario usuarioCreacion;
	@ManyToOne( fetch=FetchType.LAZY)
	@JoinColumn(name="COD_ID_USUARIO_MODIFICACION",referencedColumnName="COD_ID_USUARIO")
	private Usuario usuarioModificacion;
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="COD_ID_USUARIO_ELIMINACION",referencedColumnName="COD_ID_USUARIO")
	private Usuario usuarioEliminacion;
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "fec_creacion")
	private Date fechaCreacion;
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "fec_modificacion")
	private Date fechaModificacion;
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "fec_eliminacion")
	private Date fechaEliminacion;
	
	@Transient
	private String codigoActual;
	
	public Grupo(){
		
	}
	
	public Grupo(Integer idGrupo, String nombre) {
		this.idGrupo = idGrupo;
		this.nombre = nombre;
	}

	public Integer getIdGrupo() {
		return idGrupo;
	}

	public void setIdGrupo(Integer idGrupo) {
		this.idGrupo = idGrupo;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}
	
	public Pais getPais() {
		return pais;
	}

	public void setPais(Pais pais) {
		this.pais = pais;
	}

	public Usuario getUsuarioCreacion() {
		return usuarioCreacion;
	}

	public void setUsuarioCreacion(Usuario usuarioCreacion) {
		this.usuarioCreacion = usuarioCreacion;
	}

	public Usuario getUsuarioModificacion() {
		return usuarioModificacion;
	}

	public void setUsuarioModificacion(Usuario usuarioModificacion) {
		this.usuarioModificacion = usuarioModificacion;
	}

	public Usuario getUsuarioEliminacion() {
		return usuarioEliminacion;
	}

	public void setUsuarioEliminacion(Usuario usuarioEliminacion) {
		this.usuarioEliminacion = usuarioEliminacion;
	}

	public Date getFechaCreacion() {
		return fechaCreacion;
	}

	public void setFechaCreacion(Date fechaCreacion) {
		this.fechaCreacion = fechaCreacion;
	}

	public Date getFechaModificacion() {
		return fechaModificacion;
	}

	public void setFechaModificacion(Date fechaModificacion) {
		this.fechaModificacion = fechaModificacion;
	}

	public Date getFechaEliminacion() {
		return fechaEliminacion;
	}

	public void setFechaEliminacion(Date fechaEliminacion) {
		this.fechaEliminacion = fechaEliminacion;
	}

	public String getCodigoActual() {
		return codigoActual;
	}

	public void setCodigoActual(String codigoActual) {
		this.codigoActual = codigoActual;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((idGrupo == null) ? 0 : idGrupo.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj){
			return true;
		}
		if (obj == null){
			return false;
		}
		if (getClass() != obj.getClass()){
			return false;
		}
		Grupo other = (Grupo) obj;
		if (idGrupo == null) {
			if (other.idGrupo != null){
				return false;
			}
		} else if (!idGrupo.equals(other.idGrupo)){
			return false;
		}
		return true;
	}

	@Override
	public String toString() {
		return "Grupo [idGrupo=" + idGrupo + ", codigo=" + codigo + ", nombre="
				+ nombre + ", estado=" + estado + ", pais=" + pais
				+ ", usuarioCreacion=" + usuarioCreacion
				+ ", usuarioModificacion=" + usuarioModificacion
				+ ", usuarioEliminacion=" + usuarioEliminacion
				+ ", fechaCreacion=" + fechaCreacion + ", fechaModificacion="
				+ fechaModificacion + ", fechaEliminacion=" + fechaEliminacion
				+ "]";
	}
    
}
